import GlobalConstant from '@/config/global-constant';
import axios from 'axios';
export class Interceptors {
    public instance: any;
    constructor() {
        // 创建axios实例
        this.instance = axios.create({ timeout: 1000 * 12 });
        // 初始化拦截器
        this.initInterceptors();
    }

    // 为了让http.ts中获取初始化好的axios实例
    public getInterceptors() {
        return this.instance;
    }

    // 初始化拦截器
    public initInterceptors() {
        // // 设置post请求头
        // this.instance.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
        // /**
        //  * 请求拦截器
        //  * 每次请求前，如果存在token则在请求头中携带token
        //  */
        // this.instance.interceptors.request.use(
        //     (config: { headers: { common: { [x: string]: string | null; }; }; }) => {
        //         // 请求拦截
        //         config.headers.common['token'] = sessionStorage.getItem(GlobalConstant.TOKEN);
        //         return config;
        //     },
        //     (error: any) => {
        //         console.log(error);
        //     },
        // );

        // 响应拦截器
        this.instance.interceptors.response.use(
            // 请求成功
            (res: { status: number; headers: { date: string | number | Date; }; data: any; }) => {
                if (res.status === 200) {
                    return Promise.resolve(res.data);
                } else {
                    this.errorHandle(res);
                    return Promise.reject(res.data);
                }
            },
            // 请求失败
            (error: { response: any; }) => {
                const { response } = error;
                if (response) {
                    // 请求已发出，但是不在2xx的范围
                    this.errorHandle(response);
                    return Promise.reject(response.data);
                } else {
                    // 处理断网的情况
                    // eg:请求超时或断网时，更新state的network状态
                    // network状态在app.vue中控制着一个全局的断网提示组件的显示隐藏
                    // 关于断网组件中的刷新重新获取数据，会在断网组件中说明
                    // todo
                    console.log('网络连接异常,请稍后再试!')
                }
            });
    }


    /**
     * http握手错误
     * @param res  响应回调,根据不同响应进行不同操作
     */
    private errorHandle(res: any) {
        // 状态码判断
        switch (res.status) {
            case 401:
                break;
            case 403:
                break;
            case 404:
                break;
            case 502:
                // modalService.confirm({
                //     title: '系统提示',
                //     content: '系统内部错误，错误代码502',
                //     duration: 2000
                // })
                console.log('系统内部错误！');
                
                break;
            default:
        }
    }
}